package cmd

import (
	"fmt"
	"log"
	"time"

	"gorm.io/gorm"

	"BookStack/internal/domain/tag"
)

// CreateSampleTags 创建示例标签
func CreateSampleTags(db *gorm.DB) error {
	log.Println("开始创建示例标签...")

	// 检查是否已存在标签
	var count int64
	if err := db.Model(&tag.Tag{}).Count(&count).Error; err != nil {
		return fmt.Errorf("检查标签数量失败: %v", err)
	}

	// 如果已存在标签，则跳过创建
	if count > 0 {
		log.Println("标签已存在，跳过创建示例标签")
		return nil
	}

	// 定义示例标签
	articleTags := []struct {
		Name        string
		Slug        string
		Type        int
		Description string
	}{
		{"PHP", "php", tag.TypeArticle, "PHP编程语言相关文章"},
		{"Java", "java", tag.TypeArticle, "Java编程语言相关文章"},
		{"Python", "python", tag.TypeArticle, "Python编程语言相关文章"},
		{"Go", "go", tag.TypeArticle, "Go编程语言相关文章"},
		{"JavaScript", "javascript", tag.TypeArticle, "JavaScript编程语言相关文章"},
		{"HTML", "html", tag.TypeArticle, "HTML标记语言相关文章"},
		{"CSS", "css", tag.TypeArticle, "CSS样式语言相关文章"},
		{"数据库", "database", tag.TypeArticle, "数据库相关文章"},
		{"Linux", "linux", tag.TypeArticle, "Linux操作系统相关文章"},
		{"Docker", "docker", tag.TypeArticle, "Docker容器技术相关文章"},
		{"前端", "frontend", tag.TypeArticle, "前端开发相关文章"},
		{"后端", "backend", tag.TypeArticle, "后端开发相关文章"},
		{"移动开发", "mobile", tag.TypeArticle, "移动应用开发相关文章"},
		{"云计算", "cloud", tag.TypeArticle, "云计算技术相关文章"},
		{"人工智能", "ai", tag.TypeArticle, "人工智能相关文章"},
	}

	bookTags := []struct {
		Name        string
		Slug        string
		Type        int
		Description string
	}{
		{"编程", "programming", tag.TypeBook, "编程相关书籍"},
		{"算法", "algorithm", tag.TypeBook, "算法相关书籍"},
		{"架构", "architecture", tag.TypeBook, "架构设计相关书籍"},
		{"网络", "network", tag.TypeBook, "网络技术相关书籍"},
		{"安全", "security", tag.TypeBook, "安全技术相关书籍"},
		{"操作系统", "os", tag.TypeBook, "操作系统相关书籍"},
		{"数据科学", "data-science", tag.TypeBook, "数据科学相关书籍"},
		{"机器学习", "machine-learning", tag.TypeBook, "机器学习相关书籍"},
		{"Web开发", "web-dev", tag.TypeBook, "Web开发相关书籍"},
		{"移动开发", "mobile-dev", tag.TypeBook, "移动开发相关书籍"},
	}

	now := time.Now()

	// 创建文章标签
	log.Println("创建文章标签...")
	for _, t := range articleTags {
		newTag := &tag.Tag{
			Name:        t.Name,
			Slug:        t.Slug,
			Type:        t.Type,
			Description: t.Description,
			CreatedAt:   now,
			UpdatedAt:   now,
		}

		if err := db.Create(newTag).Error; err != nil {
			return fmt.Errorf("创建文章标签 %s 失败: %v", t.Name, err)
		}
	}

	// 创建书籍标签
	log.Println("创建书籍标签...")
	for _, t := range bookTags {
		newTag := &tag.Tag{
			Name:        t.Name,
			Slug:        t.Slug,
			Type:        t.Type,
			Description: t.Description,
			CreatedAt:   now,
			UpdatedAt:   now,
		}

		if err := db.Create(newTag).Error; err != nil {
			return fmt.Errorf("创建书籍标签 %s 失败: %v", t.Name, err)
		}
	}

	log.Println("示例标签创建完成")
	return nil
}
